#include "paralepipedorectangular.h"
#include "fv.h"

ParalepipedoRectangular::ParalepipedoRectangular(Punto3d* punto, double dx, double dy, double dz)
{
    this->posicion = punto;
    this->dx = dx;
    this->dy = dy;
    this->dz = dz;

    crearVertices();
    
}

ParalepipedoRectangular::~ParalepipedoRectangular(void)
{
    if (posicion != NULL) {
        delete posicion;
    }   
}

void ParalepipedoRectangular::crearVertices()
{
    vertice1.setCoordenadas(posicion->getX(), posicion->getY(), posicion->getZ());
    vertice2.setCoordenadas(posicion->getX() + dx, posicion->getY(), posicion->getZ());
    vertice3.setCoordenadas(posicion->getX() + dx, posicion->getY() + dy, posicion->getZ());
    vertice4.setCoordenadas(posicion->getX(), posicion->getY() + dy, posicion->getZ());

    //v1 y v2
    vertice5.setCoordenadas(posicion->getX() + dx, posicion->getY(), posicion->getZ() + dz);
    vertice6.setCoordenadas(posicion->getX(), posicion->getY(), posicion->getZ() + dz);


    vertice7.setCoordenadas(posicion->getX() + dx, posicion->getY() + dy, posicion->getZ() + dz);
    vertice8.setCoordenadas(posicion->getX() + dx, posicion->getY() + dy, posicion->getZ() + dz);
    //v3 y v4

    //v6 v5 v8 v7

    //v6 v1 v4 v7

    //v5 v2 v3 v8
}

void ParalepipedoRectangular::dibujarForma()
{
    float reduccionTextura = 1;

    glBegin(GL_QUADS);
        //cara1
        glTexCoord3f(0, 0, 0);
        glVertex3fv(FV(vertice1));

        glTexCoord3f(reduccionTextura, 0, 0);
        glVertex3fv(FV(vertice2));

        glTexCoord3f(reduccionTextura, reduccionTextura, 0);
        glVertex3fv(FV(vertice3));

        glTexCoord3f(0, reduccionTextura, 0);
        glVertex3fv(FV(vertice4));

        //cara 2
        glTexCoord3f(0, 0, 0);
        glVertex3fv(FV(vertice1));

        glTexCoord3f(reduccionTextura, 0, 0);
        glVertex3fv(FV(vertice2));

        glTexCoord3f(reduccionTextura, 0, reduccionTextura);
        glVertex3fv(FV(vertice5));

        glTexCoord3f(0, 0, reduccionTextura);
        glVertex3fv(FV(vertice6));

        //cara 3
        glTexCoord3f(0, reduccionTextura, reduccionTextura);
        glVertex3fv(FV(vertice7));

        glTexCoord3f(reduccionTextura, reduccionTextura, reduccionTextura);
        glVertex3fv(FV(vertice8));

        glTexCoord3f(reduccionTextura, reduccionTextura, 0);
        glVertex3fv(FV(vertice3));

        glTexCoord3f(0, reduccionTextura, 0);
        glVertex3fv(FV(vertice4));

        //cara 4
        glTexCoord3f(0, 0, reduccionTextura);
        glVertex3fv(FV(vertice6));

        glTexCoord3f(reduccionTextura, 0, reduccionTextura);
        glVertex3fv(FV(vertice5));

        glTexCoord3f(reduccionTextura, reduccionTextura, reduccionTextura);
        glVertex3fv(FV(vertice8));

        glTexCoord3f(0, reduccionTextura, reduccionTextura);
        glVertex3fv(FV(vertice7));

        //cara 5
        glTexCoord3f(0, 0, reduccionTextura);
        glVertex3fv(FV(vertice6));

        glTexCoord3f(0, 0, 0);
        glVertex3fv(FV(vertice1));

        glTexCoord3f(0, reduccionTextura, 0);
        glVertex3fv(FV(vertice4));

        glTexCoord3f(0, reduccionTextura, reduccionTextura);
        glVertex3fv(FV(vertice7));

        //cara 6
        glTexCoord3f(reduccionTextura, 0, reduccionTextura);
        glVertex3fv(FV(vertice5));

        glTexCoord3f(reduccionTextura, 0, 0);
        glVertex3fv(FV(vertice2));

        glTexCoord3f(reduccionTextura, reduccionTextura, 0);
        glVertex3fv(FV(vertice3));

        glTexCoord3f(reduccionTextura, reduccionTextura, reduccionTextura);
        glVertex3fv(FV(vertice8));

    glEnd();
}